파티션 장점.
관리적 측면 : 파티션 단위 백업, 추가, 삭제, 변경
성능적 측면 : 파티션 단위 조회 및 DML 수행, 경합 및 부하 분산
| 파티션유형 | 단일 파티셔닝 | + HASH | + LIST | +RANGE |
|---|---|---|---|---|
| RANGE | 8이상 | 8i이상 | 9i이상 | 11g이상 |
| HASH | 8i이상 | X | X | X |
| LIST | 9i이상 | 11g이상 | 11g이상 | 11g이상 |
-- ORACLE : Range partition
create table 주문 ( 주문번호 number, 주문일자 varchar2(8), 고객id varchar2(5), )
partition by range(주문일자) (
partition p2009_q1 values less than ('20090401') ,
partition p2009_q2 values less than ('20090701') ,
partition p2009_q3 values less than ('20091001') ,
partition p2009_q4 values less than ('20100101') ,
partition p2010_q1 values less than ('20100401') ,
partition p9999_mx values less than ( MAXVALUE )
) ;
-- ORACLE : Range + HASH Partition
create table 주문 ( 주문번호 number, 주문일자 varchar2(8), 고객id varchar2(5), )
partition by range(주문일자)
subpartition by hash(고객id) subpartitions 8
( partition p2009_q1 values less than('20090401') ,
partition p2009_q2 values less than('20090701') ,
partition p2009_q3 values less than('20091001') ,
partition p2009_q4 values less than('20100101') ,
partition p2010_q1 values less than('20100401') ,
partition p9999_mx values less than( MAXVALUE )
) ;
-- 자세한건 Online 설명서 참조 바란다.라고 함.
1. 파일 그룹을 생성한다(선택).
2. 파일을 파일 그룹에 추가한다(선택).
3. 파티션 함수(Partition Function)를 생성한다(필수).
→ 분할 방법과 경계 값을 지정
4. 파티션 구성표(Partition Schema)를 생성한다(필수).
→ 파티션 함수에서 정의한 각 파티션의 위치(파일 그룹)를 지정
5. 파티션 테이블을 생성한다.
→ 파티션 하고자 하는 테이블을 파티션 구성표에 생성한다.
--액세스할 파티션을 컴파일 시점(Compile-Time)에 미리 결정하며, 파티션 키 칼럼을 상수 조건으로 조회하는 경우에 작동한다.
select * from sales_range where sales_date >= '20060301' and sales_date <= '20060401'
-----------------------------------------------------------
| Id | Operation | Name |Pstart| Pstop |
-----------------------------------------------------------
| 0 | SELECT STATEMENT | | | |
| 1 | PARTITION RANGE ITERATOR | | 3 | 4 |
|* 2 | TABLE ACCESS FULL | SALES_RANGE | 3 | 4 |
----------------------------------------------------------
Predicate Information (identified by operation id):
---------------------------------------------------------
2 - filter("SALES_DATE">='20060301' AND "SALES_DATE"<='20060401')
-- 액세스할 파티션을 실행 시점(Run-Time)에 결정하며, 파티션 키 칼럼을 바인드 변수로 조회하는 경우가 대표적이다. NL Join할 때도 Inner 테이블이 조인 칼럼 기준으로 파티셔닝 돼 있으면 동적 Pruning이 작동한다.
select * from sales_range where sales_date >= :a and sales_date <= :b
----------------------------------------------------------------------
| Id | Operation | Name | Pstart | Pstop |
----------------------------------------------------------------------
| 0 | SELECT STATEMENT | | | |
|*1 | FILTER | | | |
| 2 | PARTITION RANGE ITERATOR | | KEY | KEY |
|*3 | TABLE ACCESS FULL | SALES_RANGE | KEY | KEY |
----------------------------------------------------------------------
Predicate Information (identified by operation id):
----------------------------------------------------------------------
1 - filter(:A<=:B)
3 - filter("SALES_DATE">=:A AND "SALES_DATE"<=:B)


| Prefixed | Non-prefixed | |
|---|---|---|
| Local | 1 | 2 |
| Global | 3 | 4 |

| 구분 | 적용기준 및 고려사항 |
|---|---|
| 비파티션 |
|
| Global Prefixed |
|
| Local Prefixed |
|
| Local Non Prefixed |
|